#include "mainwindow1.h"
#include "ui_mainwindow1.h"

/*QStandardItemModel: 用于存储表格数据，并设置表头。
QSqlQuery: 用于执行SQL查询，从数据库中获取用户数据。
QNetworkAccessManager: 用于发送网络请求，获取音乐数据。
QJsonDocument: 用于解析服务器返回的JSON数据。
QMessageBox: 用于显示提示信息。*/
MainWindow1::MainWindow1(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow1)
{
    ui->setupUi(this);

    // 创建一个QStandardItemModel对象，用于存储表格数据
    QStandardItemModel * pModel = new QStandardItemModel(10, 3, ui->tableView);
    // 设置表格的表头
    QStringList list = QStringList() << "名字" << "密码" << "电话";
    pModel->setHorizontalHeaderLabels(list); // 设置表头

    ui->tableView->setModel(pModel); // 将模型设置到表格视图中

    // 初始化数据库操作类
    mydatabase = new databaseop;
    QSqlQuery sqlQuery;

    // 查询数据库中的用户数据
    QString sql = "SELECT * FROM user;";
    mydatabase->normalExec(sqlQuery, sql);
    int row = 0;
    while (sqlQuery.next() == true) {
        for (int column = 0; column < 3; ++column) {
            QString str = sqlQuery.value(column).toString();
            QStandardItem *item = new QStandardItem(str);
            pModel->setItem(row, column, item); // 将数据项添加到模型中
        }
        row++;
    }

    // 创建一个网络访问管理对象
    manager = new QNetworkAccessManager(this);
    connect(manager, SIGNAL(finished(QNetworkReply*)),
            this, SLOT(replyFinished(QNetworkReply*))); // 连接网络请求完成信号到槽函数

    // 发送网络请求，获取音乐数据
    manager->get(QNetworkRequest(QUrl("http://music.163.com/api/search/get/web?csrf_token=hlpretag=&hlposttag=&s=陶喆&type=1&offset=0&total=true&limit=10")));
}

MainWindow1::~MainWindow1()
{
    delete ui; // 释放UI资源
}

void MainWindow1::on_pushButton_clicked()
{
    // 获取用户输入的用户名、密码和电话
    QString name = ui->lineEdit->text();
    QString password = ui->lineEdit_2->text();
    QString tel = ui->lineEdit_3->text();

    // 查询数据库中是否已存在该电话号码
    QSqlQuery query;
    QString sql = QString("SELECT * FROM user where tel='%1';").arg(tel);
    mydatabase->normalExec(query, sql);
    if (query.next() == true) {
        // 如果电话号码已存在，提示用户
        QMessageBox::about(this, "提示", "该电话已经注册过，请重新输入电话");
    } else {
        // 插入新用户数据到数据库
        QString sql = QString("INSERT INTO user VALUES ('%1','%2','%3');").arg(name).arg(password).arg(tel);
        qDebug() << sql << endl;
        mydatabase->normalExec(query, sql);
    }
}

// 处理网络请求的响应
void MainWindow1::replyFinished(QNetworkReply* reply)
{
    qDebug() << "--------\"hello\"--------" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) << endl;
    // 检查HTTP状态码
    if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 200) {
        qDebug() << "访问服务器成功" << endl;
        // 解析服务器返回的JSON数据
        parseJson(reply->readAll());
    }
}

// 解析JSON数据
void MainWindow1::parseJson(QByteArray byteArray)
{
    QJsonDocument doc = QJsonDocument::fromJson(byteArray); // 从字节数组中创建JSON文档
    if (doc.isObject())
    {
        qDebug() << "该文档是一个对象" << endl;
        QJsonObject obj1 = doc.object();
        if (obj1.contains("result") == false)
        {
            qDebug() << "错误的JSON对象" << endl;
            return;
        }
        QJsonValue var = obj1.value("result");
        QJsonObject resultObj = var.toObject();
        if (resultObj.contains("songs") == false)
        {
            qDebug() << "JSON对象没有歌曲" << endl;
            return;
        }
        var = resultObj.value("songs");
        if (var.isArray())
        {
            QJsonArray songsArr = var.toArray();
            qDebug() << "一共搜索到" << songsArr.size() << "首歌曲" << endl;
        }
    }
}
